

Ext.onReady(function(){


    var generatePdf = function(form, action){
        new Ext.ux.MediaWindow({
            id        : 'PDFViewerWin',
            title     : 'PDF Viewer',
            renderTo  : 'layout_content',
            bodyStyle : 'position:relative; padding:0px;',
            width     : 900,
            height    : 400,
            mediaCfg  : {
                mediaType       : 'PDF',
                url             : '/tarjeta/pdf',
                unsupportedText : 'Acrobat Viewer is not Installed',
                resizable       : true
            }
        }).show();
    };

    var columnRenderer = function(value){
        var combo = this.editor
        var r = combo.findRecord(combo.valueField, value);
        return r ? r.get(combo.displayField) : combo.valueNotFoundText;
    }

    X.store({
        id     : 'storeResponsable',
        fields : ['profesor']
    });

    X.store({
        id     : 'storeProfesor',
        fields : [ 'idProfesor', 'nombre', 'apellido',
                   {name: 'nombreCompleto', mapping:'apellido+", "+obj.nombre'} ]
    });

    var colModel = new Ext.grid.ColumnModel({
        defaults: {
            menuDisabled: true
        },
        columns: [
            {header: 'Profesor', dataIndex: 'profesor', width : 280,
                                  editor: new X.form.combo({
                                              dfield  :'nombreCompleto',
                                              vfield  :'idProfesor',
                                              storeId :'storeProfesor'
                                          }),
                                  renderer: columnRenderer
            }
        ]
    });

    X.grid.editor({
        id          : 'tarjetasGrid',
        height      : 285,
        width       : 300,
        cm          : colModel,
        storeId     : 'storeResponsable',
        x           : 10,
        y           : 10,
        tbar : new Ext.Toolbar({
            items:[
                X.form.button({text:'Agregar', id:'addProfesor', icon:'/img/icon_agregar.png'
                }),'-',
                X.form.button({text:'Eliminar', id:'remProfesor', icon:'/img/icon_eliminar.png'})
            ]
        })
    });

    X.event.button('addProfesor', function(){
        var grid = X.get('tarjetasGrid');
        grid.stopEditing();
        grid.store.insert(0, new grid.store.recordType({}));
        grid.startEditing(0,0);
        grid.getSelectionModel().selectRow(0);
   });

   X.event.button('remProfesor', function(){
       var grid = X.get('tarjetasGrid');
       var record = grid.getSelectionModel().getSelected();
       if (record) {
           var index = grid.store.indexOf(record);
           grid.store.removeAt(index);
           if (index < grid.store.getCount())
               grid.getSelectionModel().selectRow(index);
           else
               grid.getSelectionModel().selectRow(index-1);
        }
   });

    X.form.panel({
        id     : 'loadCursoForm',
        height : 350,
        width  : 335,
        items  : [
            X.form.hidden ({id:'editorRows'}),
            X.form.button ({x:50, y:310,  width:80, id:'generar', text:'Generar'}),
            X.form.button ({x:140, y:310, width:80, id:'reimprimir',  text:'Reimprimir'}),
            X.form.button ({x:230, y:310, width:80, id:'cancelar',  text:'Cancelar'}),
            X.get('tarjetasGrid')
        ]
    });

   X.event.button('generar', function(){

        var store = X.get('storeResponsable');
        var rowCount = store.getCount();

        if (rowCount<=0){
            X.msg.failure('Debe agregar al menos un profesor a la lista');
        }
        else{
            for (var i=0; i<rowCount; i++){
                var grid = X.get('tarjetasGrid');
                var record = store.getAt(i);
                if(!(record.get('profesor'))){
                    grid.getSelectionModel().selectRow(i);
                    X.msg.failure('Debe seleccionar el nombre del profesor en la fila '+i);
                    return;
                }
            }

            grid.getSelectionModel().selectAll();
            var sm = grid.getSelectionModel().getSelections();
            var profesores = new Array();
            var prof;

            for (i=0; i<sm.length; i++){
                prof = sm[i].get('profesor');
                if(profesores.indexOf(prof)==-1){
                    profesores.push(sm[i].get('profesor'));
                }
            }

            X.ajax({
                url: '/tarjeta/ajax-generar',
                params: {
                    profesores : Ext.encode(profesores),
                    tipo: 0 //Tipo 0 es generar
                },

                afterSuccess: generatePdf
            });
        }
    });

     X.event.button('reimprimir', function(){

        var store = X.get('storeResponsable');
        var rowCount = store.getCount();

        if (rowCount<=0){
            X.msg.failure('Debe agregar al menos un profesor a la lista');
        }
        else{
            for (var i=0; i<rowCount; i++){
                var grid = X.get('tarjetasGrid');
                var record = store.getAt(i);
                if(!(record.get('profesor'))){
                    grid.getSelectionModel().selectRow(i);
                    X.msg.failure('Debe seleccionar el nombre del profesor en la fila '+i);
                    return;
                }
            }

            grid.getSelectionModel().selectAll();
            var sm = grid.getSelectionModel().getSelections();
            var profesores = new Array();
            var prof;
            
            for (i=0; i<sm.length; i++){
                prof = sm[i].get('profesor');
                if(profesores.indexOf(prof)==-1){
                    profesores.push(sm[i].get('profesor'));
                }
            }

            X.ajax({
                url: '/tarjeta/ajax-generar',
                params: {
                    profesores : Ext.encode(profesores),
                    tipo: 1 //Tipo 1 es reimprimir
                },

                afterSuccess: generatePdf
            });
        }
    });

    X.event.button('cancelar', function(){
        X.get('creaWindow').close();
        window.location = '/'
    });

    X.win.panel({
        id       : 'creaWindow',
        title    : 'Impresión de tarjetas',
        modal    : false,
        items    : X.get('loadCursoForm')
    });

    X.get('creaWindow').show();

});

